package com.xuelang.pipeline.artifact.domain.resource.service.impl;

import com.xuelang.pipeline.artifact.client.common.exception.BizException;
import com.xuelang.pipeline.artifact.client.common.result.PageRecord;
import com.xuelang.pipeline.artifact.client.common.util.BizAssert;
import com.xuelang.pipeline.artifact.client.resource.dto.ArtifactNamespaceQuery;
import com.xuelang.pipeline.artifact.domain.resource.ArtifactNamespace;
import com.xuelang.pipeline.artifact.domain.resource.repository.ArtifactNamespaceRepository;
import com.xuelang.pipeline.artifact.domain.resource.service.ArtifactNamespaceDomainService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 镜像仓库命名空间领域服务实现类
 *
 * @author xiwen.zxg
 * @since 2024/5/15
 */
@Service
public class ArtifactNamespaceDomainServiceImpl implements ArtifactNamespaceDomainService {

    @Autowired
    private ArtifactNamespaceRepository artifactNamespaceRepository;

    @Override
    public PageRecord<ArtifactNamespace> pageList(long currentPage, long pageSize, ArtifactNamespaceQuery artifactNamespaceQuery) {
        BizAssert.notNull(artifactNamespaceQuery.getArtifactUuid(), "仓库uuid不为空");
        return artifactNamespaceRepository.pageList(currentPage, pageSize, artifactNamespaceQuery);
    }

    @Override
    public List<ArtifactNamespace> list(ArtifactNamespaceQuery artifactNamespaceQuery) {
        BizAssert.notNull(artifactNamespaceQuery.getArtifactUuid(), "仓库uuid不为空");
        return artifactNamespaceRepository.list(artifactNamespaceQuery);
    }

    @Override
    public Boolean save(ArtifactNamespace artifactNamespace) {
        BizAssert.notNull(artifactNamespace.getArtifactUuid(), "artifactUuid不能为空");
        BizAssert.notNull(artifactNamespace.getName(), "name不能为空");
        BizAssert.notNull(artifactNamespace.getAccessLevel(), "accessLevel不能为空");
        if(existsName(artifactNamespace.getArtifactUuid(), artifactNamespace.getUuid(), artifactNamespace.getName())) {
            throw new BizException("name已经存在");
        }
        return artifactNamespaceRepository.save(artifactNamespace);
    }

    @Override
    public Boolean update(ArtifactNamespace artifactNamespace) {
        BizAssert.notNull(artifactNamespace.getUuid(), "uuid不能为空");
        BizAssert.notNull(artifactNamespace.getArtifactUuid(), "artifactUuid不能为空");
        BizAssert.notNull(artifactNamespace.getName(), "name不能为空");
        BizAssert.notNull(artifactNamespace.getAccessLevel(), "accessLevel不能为空");
         // 更新时，名称不能重复，摒弃当前镜像仓库命名空间的名称。
        if(existsName(artifactNamespace.getArtifactUuid(), artifactNamespace.getUuid(), artifactNamespace.getName())) {
            throw new BizException("name已经存在");
        }
        return artifactNamespaceRepository.update(artifactNamespace);
    }

    @Override
    public Boolean delete(String uuid) {
        BizAssert.notNull(uuid, "uuid不能为空");

        return artifactNamespaceRepository.delete(uuid);
    }

    @Override
    public ArtifactNamespace query(String uuid) {
        BizAssert.notNull(uuid, "uuid不能为空");

        return artifactNamespaceRepository.query(uuid);
    }

    @Override
    public Boolean existsName(String artifactUuid, String uuid, String name) {
        return artifactNamespaceRepository.existsName(artifactUuid, uuid, name);
    }
}
